﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MJM.CBD.Conn;
using MJM.SPP.EntidadesNegocio;
using System.Data;
using System.Data.SqlClient;


namespace MJM.SPP.AccesoDatos
{
    public class AccesoGrupoAD
    {
        public int Insertar(AccesoGrupoEN objEN)
        {
            int codigo = 0;
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_i_T_WEB_PERGRU_Insertar", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmIDAcceso,prmIDSubOpcion,prmIDModulo,prmIDControl,prmIDGrupo,prmActivo,prmidPrograma;
            try
            {
                prmidPrograma = cmd.CreateParameter();
                prmidPrograma.ParameterName = "@vPROMUN_inID";
                prmidPrograma.SqlDbType = SqlDbType.Int;
                prmidPrograma.Value = objEN.PROMUN_inID;
                cmd.Parameters.Add(prmidPrograma);

                prmIDModulo = cmd.CreateParameter();
                prmIDModulo.ParameterName = "@vOPTGEN_P_inID";
                prmIDModulo.SqlDbType = SqlDbType.Int;
                prmIDModulo.Value = objEN.OPTGEN_P_inID;
                cmd.Parameters.Add(prmIDModulo);

                prmIDSubOpcion = cmd.CreateParameter();
                prmIDSubOpcion.ParameterName = "@vSUBOPT_P_inID";
                prmIDSubOpcion.SqlDbType = SqlDbType.Int;
                prmIDSubOpcion.Value = objEN.SUBOPT_P_inID;
                cmd.Parameters.Add(prmIDSubOpcion);

                prmIDControl = cmd.CreateParameter();
                prmIDControl.ParameterName = "@vOPTCON_P_inID";
                prmIDControl.SqlDbType = SqlDbType.Int;
                prmIDControl.Value = objEN.OPTCON_P_inID;
                cmd.Parameters.Add(prmIDControl);

                prmIDGrupo = cmd.CreateParameter();
                prmIDGrupo.ParameterName = "@vUSUGRU_P_inID";
                prmIDGrupo.SqlDbType = SqlDbType.Int;
                prmIDGrupo.Value = objEN.USUGRU_P_inID1;
                cmd.Parameters.Add(prmIDGrupo);

                prmActivo = cmd.CreateParameter();
                prmActivo.ParameterName = "@vPERGRU_inACT";
                prmActivo.SqlDbType = SqlDbType.Int;
                prmActivo.Value = objEN.PERGRU_inACT;
                cmd.Parameters.Add(prmActivo);

                prmIDAcceso = cmd.CreateParameter();
                prmIDAcceso.SqlDbType=SqlDbType.Int;
                prmIDAcceso.Direction = ParameterDirection.ReturnValue;
                cmd.Parameters.Add(prmIDAcceso);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                codigo = Convert.ToInt32(prmIDAcceso.Value);

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch(Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return codigo;
        }

        public List<AccesoGrupoEN> Listar_Control(int idControl)
        {
            List<AccesoGrupoEN> lst = new List<AccesoGrupoEN>();
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_PERGRU_Lista_Control", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmidModulo;
            SqlDataReader dr;
            try
            {
                prmidModulo = cmd.CreateParameter();
                prmidModulo.ParameterName = "@vOPTCON_P_inID";
                prmidModulo.SqlDbType = SqlDbType.Int;
                prmidModulo.Value = idControl;
                cmd.Parameters.Add(prmidModulo);

                cmd.Connection.Open();
                dr = cmd.ExecuteReader();

                AccesoGrupoEN obj;
                while (dr.Read())
                {
                    obj = new AccesoGrupoEN();
                    obj.PERGRU_P_inID = dr.GetInt32(0);
                    obj.USUGRU_P_inID1 = dr.GetInt32(1);
                    obj.PROMUN_inID = dr.GetInt32(2);
                    obj.OPTGEN_P_inID = dr.GetInt32(3);
                    obj.SUBOPT_P_inID = dr.GetInt32(4);
                    obj.OPTCON_P_inID = dr.GetInt32(5);
                    obj.PERGRU_inACT = dr.GetInt32(6);
                    obj.PERGRU_inFLAELI = 1;
                    lst.Add(obj);
                }

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return lst;
        }

        public List<AccesoGrupoEN> Listar_Opcion(int idOpcion)
        {
            List<AccesoGrupoEN> lst = new List<AccesoGrupoEN>();
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_PERGRU_Lista_Opciones", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmidModulo;
            SqlDataReader dr;
            try
            {
                prmidModulo = cmd.CreateParameter();
                prmidModulo.ParameterName = "@vSUBOPT_P_inID";
                prmidModulo.SqlDbType = SqlDbType.Int;
                prmidModulo.Value = idOpcion;
                cmd.Parameters.Add(prmidModulo);

                cmd.Connection.Open();
                dr = cmd.ExecuteReader();

                AccesoGrupoEN obj;
                while (dr.Read())
                {
                    obj = new AccesoGrupoEN();
                    obj.PERGRU_P_inID = dr.GetInt32(0);
                    obj.USUGRU_P_inID1 = dr.GetInt32(1);
                    obj.PROMUN_inID = dr.GetInt32(2);
                    obj.OPTGEN_P_inID = dr.GetInt32(3);
                    obj.SUBOPT_P_inID = dr.GetInt32(4);
                    obj.OPTCON_P_inID = dr.GetInt32(5);
                    obj.PERGRU_inACT = dr.GetInt32(6);
                    obj.PERGRU_inFLAELI = 1;
                    lst.Add(obj);
                }

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return lst;
        }

        public List<AccesoGrupoEN> Listar_Modulo(int idModulo)
        {
            List<AccesoGrupoEN> lst = new List<AccesoGrupoEN>();
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_PERGRU_Lista_Modulos", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmidModulo;
            SqlDataReader dr;
            try
            {
                prmidModulo = cmd.CreateParameter();
                prmidModulo.ParameterName = "@vOPTGEN_P_inID";
                prmidModulo.SqlDbType = SqlDbType.Int;
                prmidModulo.Value = idModulo;
                cmd.Parameters.Add(prmidModulo);

                cmd.Connection.Open();
                dr = cmd.ExecuteReader();

                AccesoGrupoEN obj;
                while (dr.Read())
                {
                    obj = new AccesoGrupoEN();
                    obj.PERGRU_P_inID = dr.GetInt32(0);
                    obj.USUGRU_P_inID1 = dr.GetInt32(1);
                    obj.PROMUN_inID = dr.GetInt32(2);
                    obj.OPTGEN_P_inID = dr.GetInt32(3);
                    obj.SUBOPT_P_inID = dr.GetInt32(4);
                    obj.OPTCON_P_inID = dr.GetInt32(5);
                    obj.PERGRU_inACT = dr.GetInt32(6);
                    obj.PERGRU_inFLAELI = 1;
                    lst.Add(obj);
                }

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return lst;
        }

        public List<AccesoGrupoEN> Listar_Programa(int idPrograma)
        {
            List<AccesoGrupoEN> lst = new List<AccesoGrupoEN>();
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_PERGRU_Lista_Programa", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmidPrograma;
            SqlDataReader dr;
            try
            {
                prmidPrograma = cmd.CreateParameter();
                prmidPrograma.ParameterName = "@vPROMUN_inID";
                prmidPrograma.SqlDbType = SqlDbType.Int;
                prmidPrograma.Value = idPrograma;
                cmd.Parameters.Add(prmidPrograma);

                cmd.Connection.Open();
                dr = cmd.ExecuteReader();

                AccesoGrupoEN obj;
                while (dr.Read())
                {
                    obj = new AccesoGrupoEN();
                    obj.PERGRU_P_inID = dr.GetInt32(0);
                    obj.USUGRU_P_inID1 = dr.GetInt32(1);
                    obj.PROMUN_inID = dr.GetInt32(2);
                    obj.OPTGEN_P_inID = dr.GetInt32(3);
                    obj.SUBOPT_P_inID = dr.GetInt32(4);
                    obj.OPTCON_P_inID = dr.GetInt32(5);
                    obj.PERGRU_inACT = dr.GetInt32(6);
                    obj.PERGRU_inFLAELI = 1;
                    lst.Add(obj);
                }

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return lst;
        }

        public List<AccesoGrupoEN> Listar_Programa_Grupo(int idGrupo)
        {
            List<AccesoGrupoEN> lst = new List<AccesoGrupoEN>();
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_PERGRU_ListarProGrupo", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmidGrupo;
            SqlDataReader dr;
            try
            {
                prmidGrupo = cmd.CreateParameter();
                prmidGrupo.ParameterName = "@idGrupo";
                prmidGrupo.SqlDbType = SqlDbType.Int;
                prmidGrupo.Value = idGrupo;
                cmd.Parameters.Add(prmidGrupo);
                cmd.Connection.Open();
                dr = cmd.ExecuteReader();

                AccesoGrupoEN obj;
                while (dr.Read())
                {
                    obj = new AccesoGrupoEN();
                    obj.PERGRU_P_inID = dr.GetInt32(0);
                    obj.PROMUN_chNOMPRO = dr.GetString(2);
                    obj.PROMUN_inID = dr.GetInt32(1);
                    obj.PERGRU_inACT = dr.GetInt32(3);
                    obj.ProInter = dr.GetInt32(4);
                    obj.PERGRU_inFLAELI = 1;
                    lst.Add(obj);
                }

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return lst;
        }

        public List<AccesoGrupoEN> Listar_Modulos_Grupo(int idGrupo,int idPrograma)
        {
            List<AccesoGrupoEN> lst = new List<AccesoGrupoEN>();
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_PERGRU_ListarModGrupo", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmidGrupo, prmidPrograma;
            SqlDataReader dr;
            try
            {
                prmidPrograma = cmd.CreateParameter();
                prmidPrograma.ParameterName = "@idPrograma";
                prmidPrograma.SqlDbType = SqlDbType.Int;
                prmidPrograma.Value = idPrograma;
                cmd.Parameters.Add(prmidPrograma);

                prmidGrupo = cmd.CreateParameter();
                prmidGrupo.ParameterName = "@idGrupo";
                prmidGrupo.SqlDbType = SqlDbType.Int;
                prmidGrupo.Value = idGrupo;
                cmd.Parameters.Add(prmidGrupo);
                cmd.Connection.Open();
                dr = cmd.ExecuteReader();

                AccesoGrupoEN obj;
                while(dr.Read())
                {
                    obj = new AccesoGrupoEN();
                    obj.PERGRU_P_inID = dr.GetInt32(0);
                    obj.OPTGEN_chNOMMEN = dr.GetString(2);
                    obj.OPTGEN_P_inID = dr.GetInt32(1);
                    obj.PERGRU_inACT = dr.GetInt32(3);
                    obj.PERGRU_inFLAELI = 1;
                    lst.Add(obj);
                }

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch(Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return lst;
        }

        public List<AccesoGrupoEN> Listar_Modulos_SubOpcion(int idPrograma,int idModulo,int idGrupo)
        {
            List<AccesoGrupoEN> lst = new List<AccesoGrupoEN>();
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_PERGRU_ListarOptGrupo", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmidGrupo, prmidModulo, prmidPrograma;
            SqlDataReader dr;

            try
            {
                prmidPrograma = cmd.CreateParameter();
                prmidPrograma.ParameterName = "@idPrograma";
                prmidPrograma.SqlDbType = SqlDbType.Int;
                prmidPrograma.Value = idPrograma;
                cmd.Parameters.Add(prmidPrograma);

                prmidGrupo = cmd.CreateParameter();
                prmidGrupo.ParameterName = "@idGrupo";
                prmidGrupo.SqlDbType = SqlDbType.Int;
                prmidGrupo.Value = idGrupo;
                cmd.Parameters.Add(prmidGrupo);

                prmidModulo = cmd.CreateParameter();
                prmidModulo.ParameterName = "@idModulo";
                prmidModulo.SqlDbType = SqlDbType.Int;
                prmidModulo.Value = idModulo;
                cmd.Parameters.Add(prmidModulo);

                cmd.Connection.Open();
                dr = cmd.ExecuteReader();

                AccesoGrupoEN obj;
                while (dr.Read())
                {
                    obj = new AccesoGrupoEN();
                    obj.PERGRU_P_inID = dr.GetInt32(0);
                    obj.SUBOPT_chNOMSOP = dr.GetString(2);
                    obj.SUBOPT_P_inID = dr.GetInt32(1);
                    obj.PERGRU_inACT = dr.GetInt32(3);
                    obj.Tipo = dr.GetString(4)[0];
                    obj.PERGRU_inFLAELI = 1;
                    lst.Add(obj);
                }

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch(Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return lst;
        }

        public List<AccesoGrupoEN> Listar_Modulos_Control(int idSubOpcion,int idModulo, int idGrupo,int idPrograma)
        {
            List<AccesoGrupoEN> lst = new List<AccesoGrupoEN>();
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_PERGRU_ListarContGrupo", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmidGrupo, prmidModulo,prmidSubOpcion,prmidPrograma;
            SqlDataReader dr;

            try
            {
                prmidPrograma = cmd.CreateParameter();
                prmidPrograma.ParameterName = "@idPrograma";
                prmidPrograma.SqlDbType = SqlDbType.Int;
                prmidPrograma.Value = idPrograma;
                cmd.Parameters.Add(prmidPrograma);

                prmidGrupo = cmd.CreateParameter();
                prmidGrupo.ParameterName = "@idGrupo";
                prmidGrupo.SqlDbType = SqlDbType.Int;
                prmidGrupo.Value = idGrupo;
                cmd.Parameters.Add(prmidGrupo);

                prmidModulo = cmd.CreateParameter();
                prmidModulo.ParameterName = "@idModulo";
                prmidModulo.SqlDbType = SqlDbType.Int;
                prmidModulo.Value = idModulo;
                cmd.Parameters.Add(prmidModulo);

                prmidSubOpcion = cmd.CreateParameter();
                prmidSubOpcion.ParameterName = "@idSubOpicon";
                prmidSubOpcion.SqlDbType = SqlDbType.Int;
                prmidSubOpcion.Value = idSubOpcion;
                cmd.Parameters.Add(prmidSubOpcion);


                cmd.Connection.Open();
                dr = cmd.ExecuteReader();

                AccesoGrupoEN obj;
                while (dr.Read())
                {
                    obj = new AccesoGrupoEN();
                    obj.PERGRU_P_inID = dr.GetInt32(0);
                    obj.OPTCON_chNOMCON = dr.GetString(2);
                    obj.OPTCON_P_inID = dr.GetInt32(1);
                    obj.PERGRU_inACT = dr.GetInt32(3);
                    obj.PERGRU_inFLAELI = 1;
                    lst.Add(obj);
                }

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return lst;
        }

        public int Modificar(AccesoGrupoEN obj)
        {
            int codigo = 0;
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_u_T_WEB_PERGRU_Modificar", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmIDAcceso, prmEliminado, prmActivado;
            try
            {
                prmIDAcceso = cmd.CreateParameter();
                prmIDAcceso.ParameterName = "@vPERGRU_P_inID";
                prmIDAcceso.SqlDbType = SqlDbType.Int;
                prmIDAcceso.Value = obj.PERGRU_P_inID;
                cmd.Parameters.Add(prmIDAcceso);

                prmEliminado = cmd.CreateParameter();
                prmEliminado.ParameterName = "@vPERGRU_inFLAELI";
                prmEliminado.SqlDbType = SqlDbType.Int;
                prmEliminado.Value = obj.PERGRU_inFLAELI;
                cmd.Parameters.Add(prmEliminado);

                prmActivado = cmd.CreateParameter();
                prmActivado.ParameterName = "@vPERGRU_inACT";
                prmActivado.SqlDbType = SqlDbType.Int;
                prmActivado.Value = obj.PERGRU_inACT;
                cmd.Parameters.Add(prmActivado);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
                codigo = 1;
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();

            }
            return codigo;
        }
    }
}
